<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index08-Map和Set</title>
</head>
<body>
    <script type="text/javascript">
        // Map使用
        // let map = new Map();
        // map.set("name","张三");
        // map.set("age", 11);
        // map.set("已婚", false);
        // console.log(map.get('name'));
        // console.log(map.get('age'));
        // console.log(map.get('已婚'));
        // // key是对象
        // let obj = {};
        // map.set(obj, "对象");
        // console.log(map.get(obj));
        // // key是函数
        // let fun = () => {};
        // map.set(fun, "函数");
        // console.log(map.get(fun));
        // // key是NaN
        // map.set(NaN, "非数字");
        // console.log(map.get(NaN));

        // Map循环、遍历、迭代
        // let map2 = new Map();
        // map2.set("name","张三");
        // map2.set("age", 11);
        // map2.set("已婚", false);
        // for (let [key, value] of map2) {
        //   console.log(key, value);
        // }
        // for (let key of map2.keys()) {
        //   console.log(key);
        // }
        // for (let value of map2.values()) {
        //   console.log(value);
        // }
        // map2.forEach((value, key) => {
        //   // 箭头函数中不能使用arguments
        //   // console.log(arguments);
        //   console.log(value, key);
        // });

        // Map的操作
        // Map与数组之间转换
        // let arr = [['k1', 'v1'], ['k2', 'v2']];
        // let map3 = new Map(arr);
        // map3.forEach((value, key) => {
        //   console.log(key + " = " + value);
        // })
        // let arr2 = Array.from(map3);
        // console.log(arr2);
        // // 合并
        // let map4 = new Map([...map2, ...map3]);
        // console.log(map4);

        // Set用法
        // Set——值是唯一的，并且无序
        // let set = new Set();
        // set.add('张三');
        // set.add('李四');
        // set.add('张三');
        // for (let value of set.values()) {
        //   console.log(value);
        // }
        // set.forEach(value => {
        //   console.log(value);
        // });
        //Set和数组之间转换
        // let arr = [['k1', 'v1'], ['k2', 'v2']];
        // let set2 = new Set(arr);
        // console.log(set2);
        // // console.log(typeof(set2));
        // let arr2 = [...set2];
        // console.log(arr2);

        // 数组去重
        // let arr3 = [1, 3, 5, 3, 6];
        // let set3 = new Set(arr3);
        // let arr4 = [...set3];
        // console.log(arr4);

        // 求并集
        // let a = new Set([1, 2, 3]);
        // let b = new Set([2, 3, 4]);
        // let union = new Set([...a, ...b]);
        // console.log(union);

        // 求交集
        // let a2 = new Set([1, 2, 3]);
        // let b2 = new Set([2, 3, 4]);
        // let intersect = new Set([...a2].filter(x => b2.has(x)));
        // console.log(intersect);

        // 求差集
        let a3 = new Set([1, 2, 3]);
        let b3 = new Set([2, 3, 4]);
        // a3-b3={1}
        let difference1 = new Set([...a3].filter(x => !b3.has(x)));
        console.log(difference1);
        // b3-a3={4}
        let difference2 = new Set([...b3].filter(x => !a3.has(x)));
        console.log(difference2);
    </script>
</body>
</html>